package com.transaction.manage.util;

import com.transaction.common.util.ConstUtil;
import com.transaction.common.util.FileUtil;
import com.transaction.manage.model.dto.ChannelInfo;

import java.io.File;
import java.util.List;
import java.util.Map;

public class BuildFileUtil {

    /**
     * 生成文件
     *
     * @param fileType    文件类型
     * @param handleDate  处理日期
     * @param channelInfo 渠道信息
     * @param dataList    数据集合
     * @param columnsList 接口集合
     */
    public static void generateFile(String fileType, String handleDate, ChannelInfo channelInfo,
                                    List<Map<String, Object>> dataList, List<Map<String, Object>> columnsList) {
        /***
         * 1、生成索引文件
         *  1.1、索引文件名称
         *  1.2、索引文件内容
         * 2、生成正式文件
         *  2.1 正式文件名称
         *  2.2 正式文件头部
         *  2.3 正式文件字段
         *  2.4 正式文件数据
         * 3、获得文件写出地址
         * 4、写出文件
         */
        String creatorCode = channelInfo.getSendCode();
        String receiverCode = channelInfo.getReceiveCode();
        String versionCode = channelInfo.getVersionCode();
        String dealFiles = channelInfo.getDealFileType();
        String channelCode = channelInfo.getChannelCode();
        String indexNamePrefix = FileUtil.buildIndexFileNamePrefix(fileType);

        //生成索引文件名称
        String indexFileName = FileUtil.buildIndexFileName(creatorCode, receiverCode, handleDate, indexNamePrefix);
        List<String> fileNames = FileUtil.buildIndexFileNameList(creatorCode, receiverCode, handleDate, fileType,dealFiles);
        String indexFileContent = FileUtil.buildIndexFileContent(creatorCode, receiverCode, versionCode, handleDate, fileNames);

        //生成正式文件名称
        String fileName = FileUtil.buildFileName(creatorCode, receiverCode, handleDate, fileType);
        String fileTop = FileUtil.buildFileTop(creatorCode, receiverCode, versionCode, handleDate, fileType);
        String fileFields = FileUtil.buildFileColumns(columnsList);
        String fileData = FileUtil.buildFileData(versionCode, dataList, columnsList);
        String fileContent = fileTop + fileFields + fileData;

        //获得写文件地址
        String filePath = FileUtil.buildSendFilePath(channelCode,handleDate, ConstUtil.TRANSACTION_MANAGE);
        FileUtil.checkAndCreateDirs(filePath);

        //写出文件
        File indexFile = new File(filePath + indexFileName);
        File file = new File(filePath + fileName);

        FileUtil.writeFile(indexFile, indexFileContent);
        FileUtil.writeFile(file, fileContent);
    }
}
